
#ifndef __LEXICAL_ANALYSIS_H
#define __LEXICAL_ANALYSIS_H
#include <string>
#include <vector>

class Lexical_Analysis
{
    int DFA_Table[10][20];

public:
    Lexical_Analysis()
    {
        init_DFA();
    }
    /* 状态：
    空闲
    字符串
    引号字符串
    特殊符号
    错误
    */
    enum Analysis_Status
    {
        STAT_IDLE = 0,
        STAT_STRING = 1,
        STAT_STR_QUOTE = 2,
        STAT_SYMBOL = 3,
        STAT_ERROR = 4
    };

    /*
    # 输入:
    数字
    字符
    符号，
    点号
    引号
    单引号
    空白
    减号
    */
    enum char_type
    {
        WORD_CHAR,   // 字符 abcABC
        WORD_SYMBOL, // 符号 {}[]:
        WORD_DOT,    // 点号  .
        WORD_QUOTE,  // 引号  ""
        WORD_SPACE,  // 空白  ' '
        WORD_MINUS,  // 减号 -

        WORD_T, // t
        WORD_R, // r
        WORD_U, // u
        WORD_E, // e

        WORD_F, // f
        WORD_A, // a
        WORD_L, // l
        WORD_S, // s
        WORD_N, // n

        WORD_BACK_SLASH // 反斜杠
    };

    int getWordType(char word);

    void init_DFA();

    std::vector<std::string> analysis(const std::string &s);
};
#endif /*__LEXICAL_ANALYSIS_H*/
